package com.example.demo.mapper;

import com.example.demo.entity.Dish;
import com.example.demo.entity.vo.DishVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface DishMapper {
    /**
     * 获取菜品列表, 用户获取 上架的菜品, 管理员获取 全部菜品
     *
     * @param state         查询的菜品状态 (用户只能查询上架的菜品)
     * @param inputValue    进行模糊匹配
     * @param typeName      根据菜品类型名查询
     * @param priceSort     根据价格升序或降序
     * @param gradeSort     根据评分升序或降序
     * @return              菜品列表
     */
    List<DishVO> getList(@Param("state") Integer state,
                         @Param("inputValue") String inputValue,
                         @Param("typeName") String typeName,
                         @Param("priceSort") String priceSort,
                         @Param("gradeSort") String gradeSort,
                         @Param("pSize") Integer pSize,
                         @Param("pIndex") Integer pIndex);

    Integer getCount(@Param("state") Integer state,
                     @Param("inputValue") String inputValue,
                     @Param("typeName") String typeName,
                     @Param("priceSort") String priceSort,
                     @Param("gradeSort") String gradeSort);

    /**
     * 查看订单详情
     * 根据 订单ID 查询订单包含的菜品
     * 用户只能查看自己的订单
     *
     * @param orderId   订单ID
     * @Param userId    用户ID
     * @return          菜品列表
     */
    /**
     * 查看订单详情
     * 根据 订单ID 查询订单包含的菜品
     * 用户只能查看自己的订单, 用户要带上用户ID查询
     *
     * @param orderId   订单ID
     * @param userId    用户ID
     * @return          菜品列表
     */
    List<DishVO> getListByOrderId(@Param("orderId") Integer orderId,
                                  @Param("userId") Integer userId);

    /**
     * 添加菜品
     * 将新添加的记录的 自增id 赋值给 dish 的 id
     *
     * @param dish  菜品
     * @return      受影响的行数
     */
     int add(Dish dish);

    /**
     * 修改菜品
     *
     * @param dish  菜品
     * @return      受影响的行数
     */
    int update(Dish dish);

    /**
     * 删除某个菜品类型之前,
     * 先修改与该菜品类型ID绑定的菜品,
     * 菜品类型ID设为默认 1
     *
     * @param typeId    菜品ID
     * @return          受影响的行数
     */
    int updateTypeId(@Param("typeId") Integer typeId);

    /**
     * 根据菜品ID集合
     * 查询有效的菜品数量
     *
     * @param dishIdList
     * @return
     */
    int checkDishId(List<Integer> dishIdList);
}
